# encoding:UTF-8
# 使用twisted简单实现rpc模式变成

# xmlrpc 即XML远程方法调用,利用http+xml封装进行RPC调用。基于http协议传输、XML作为信息编码格式。
# 一个xml-rpc消息就是一个请求体为xml的http-post请求，服务端执行后也以xml格式编码返回。
# 这个标准面前已经演变为下面的SOAP协议。可以理解SOAP是XML-RPC的高级版本。

from twisted.web import xmlrpc, server
from twisted.internet import reactor
import pyjsonrpc


# 1继承xmlrpc.XMLRPC的
# 2每个方法前缀需要使用xmlrpc_xxx方式  否则前台收不到

class SimpleServer(xmlrpc.XMLRPC):
    def xmlrpc_add(self, a, b):
        return a + b

    def xmlrpc_addstr(self, a, b):
        return '%s %s' % (a, b)


def twistedServer():
    '''
    使用xmlrpc.XMLRPC  作为服务器
    :return:
    '''
    r = SimpleServer()
    reactor.listenTCP(7080, server.Site(r))
    reactor.run()


# JSON-RPC:JSON Remote Procedure Call，即JSON远程方法调用 。类似于XML-RPC，不同之处是使用JSON作为信息交换格式

class RequestHandler(pyjsonrpc.HttpRequestHandler):
    @pyjsonrpc.rpcmethod
    def add(self, a, b):
        return a + b


def jsonrpcServer():
    '''
    通过jsonrpc实现rpc服务端  少了一个包 暂时不能用
    :return:
    '''
    # Threading HTTP-Server
    http_server = pyjsonrpc.ThreadingHttpServer(
        server_address=('localhost', 8080),
        RequestHandlerClass=RequestHandler
    )
    print("Starting HTTP server ...")
    print("URL: http://localhost:8080")
    http_server.serve_forever()


if __name__ == "__main__":
    jsonrpcServer()




